package gruppe5.dame.client;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButton;

/**
 * Die Menubar am oberen Bildschirmrand.
 * @author Sebastian Kramer 
 * @author Martin Eutinger
 * @author Edmond Landry Nenzeko
 *
 */
public class Menubar extends JMenuBar 
{

	/**
	 * generated serial version ID
	 */
	private static final long serialVersionUID = 1L;
	
	/**
	 * Der Listener der auf Menubar Eingaben reagiert.
	 * z.B. wechseln von Themes.
	 */
	private ListenerMenubar listenerMenubar = new ListenerMenubar(this);
	
	/**
	 * Hauptfenster
	 */
	private Hauptfenster frame;
	
	/**
	 * Konstruktor von Menubar.
	 * Erzeugt alle Elemente, inklusive der Themenliste.
	 */
	public Menubar(Hauptfenster frame) 
	{
		this.frame = frame;
		JMenu datei;
		JMenu einstellungen;
		JMenu hilfe;
		
		/*
		 * DATEI
		 */
		this.add(datei = new JMenu("Datei"));
		
		/*
		 * Statistiken
		 */
		JMenuItem statistiken = new JMenuItem("Statistiken");
		datei.add(statistiken);
		statistiken.addActionListener(listenerMenubar);
		
		/*
		 * Spiel beenden
		 */
		JMenuItem spielVerlassen = new JMenuItem("Spiel verlassen");
		datei.add(spielVerlassen);
		spielVerlassen.addActionListener(listenerMenubar);
		
		/*
		 * Anwendung beenden
		 */
		JMenuItem programmBeenden = new JMenuItem("Programm beenden");
		datei.add(programmBeenden);
		programmBeenden.addActionListener(listenerMenubar);
		
		/*
		 * EINSTELLUNGEN
		 */
		this.add(einstellungen = new JMenu("Einstellungen"));
		
		/*
		 * Themen ausw�hlen
		 */
		JMenu themenAuswahl = this.addThemen();
		einstellungen.add(themenAuswahl);
		
		/*
		 * Spielz�ge als Text einblenden
		 */
		JCheckBox textEinblenden = new JCheckBox("Spielzuege als Text einblenden");
		einstellungen.add(textEinblenden);
		textEinblenden.addActionListener(listenerMenubar);
	
		/*
		 * HILFE
		 */
		this.add(hilfe = new JMenu("Hilfe"));
		
		/*
		 * Spielanleitung
		 */
		JMenuItem anleitung = new JMenuItem("Spielanleitung");
		hilfe.add(anleitung);
		anleitung.addActionListener(listenerMenubar);
		
		this.setVisible(true);
	}

	/**
	 * Liefert ein JMenu mit den verf�gbaren Themen.
	 * @return Das JMenu mit den verf�gbaren Themen.
	 */
	private JMenu addThemen() 
	{
		JMenu themenAuswahl = new JMenu("Themen auswaehlen");
		
		String[] themenListe = Ressourcen.getThemenListe();
		
		try {
			ButtonGroup group = new ButtonGroup();
			JRadioButton[] themenButtons = new JRadioButton[themenListe.length];
			for(int i = 0; i < themenListe.length; i++)
			{
				themenAuswahl.add(themenButtons[i] = new JRadioButton(themenListe[i]));
				themenButtons[i].setActionCommand(themenListe[i] +"theme");
				themenButtons[i].addActionListener(listenerMenubar);
				group.add(themenButtons[i]);
				if(Ressourcen.getSelectedTheme().equals(themenButtons[i].getText()))
						themenButtons[i].setSelected(true);
			}
		} catch (NullPointerException e) {
			e.printStackTrace();
		}
		return themenAuswahl;
	}

	/**
	 * Spiel verlassen
	 */
	public void spielVerlassen() {
		frame.spielVerlassen();
	}

	/**
	 * Spielz&uuml;ge als Text einblenden
	 */
	public void spielzuegeAlsText() {
		frame.spielzuegeAlsText();
		
	}
}
